/******************************************************************
 * @Title: CaptchaUtil.java 
 * @Package com.omni.web.utils 
 * @Description: TODO
 * @author Dellinger
 * @date 2015年4月25日 下午4:21:41 
 * @version v1.0 
 * @copyright Omnikennect.com
 ******************************************************************/
package com.omni.web.utils;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;

/** 
 * @ClassName: CaptchaUtil 
 * @Description: TODO 
 * @author Dellinger
 * @date 2015年4月25日 下午4:21:41 
 *  
 */
public final class CaptchaGenerator {

	private int width = 135;
	private int height = 30;
	private int codeLength = 6;
	
	private String[] charArray = new String[]{"0","1","2","3","4","5","6","7","8","9",    
            "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R",    
            "S","T","U","V","W","X","W","Z"};
	
	public String generateRandomNumberCode() {    
        String sRand = "";    
        Random random = new Random();    
        for (int i = 0; i < codeLength; i++) {    
            sRand += random.nextInt(10);    
        }    
        return sRand;    
    }
	
	public String generateRandomMixedCode() {    
        String sRand = "";    
        Random random = new Random(System.currentTimeMillis());    
        for (int i = 0; i < codeLength; i++) {    
            sRand += charArray[random.nextInt(charArray.length)];    
        }    
        return sRand;    
    }
	
	public BufferedImage getImage(String checkCode) {    
   
        BufferedImage image = new BufferedImage(width, height,    
                BufferedImage.TYPE_INT_RGB);    
   
        Graphics g = image.getGraphics();    
    
        g.setColor(getRandColor(200, 250));    
        g.fillRect(0, 0, width, height);    
    
        //g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
        g.setFont(new Font("Axure Handwriting", Font.ITALIC, 20));
   
        Random random = new Random();    
    
        g.setColor(getRandColor(160, 200));    
        for (int i = 0; i < 155; i++) {    
            int x = random.nextInt(width);    
            int y = random.nextInt(height);    
            int xl = random.nextInt(12);    
            int yl = random.nextInt(12);    
            g.drawLine(x, y, x + xl, y + yl);    
        }    
            
        for (int i = 0; i < checkCode.length(); i++) {    
    
            g.setColor(new Color(20 + random.nextInt(110), 20 + random    
                    .nextInt(110), 20 + random.nextInt(110)));    
            g.drawString(String.valueOf(checkCode.charAt(i)), 13 * i + 6, 16);    
        }    
    
        g.dispose();    
        return image;    
    }
	
	public int getWidth() {
		return width;
	}

	public void setWidth(int width) {
		this.width = width;
	}

	public int getHeight() {
		return height;
	}

	public void setHeight(int height) {
		this.height = height;
	}

	public int getCodeLength() {
		return codeLength;
	}

	public void setCodeLength(int codeLength) {
		this.codeLength = codeLength;
	}

	private Color getRandColor(int fc, int bc) {    
        Random random = new Random();    
        if (fc > 255)    
            fc = 255;    
        if (bc > 255)
            bc = 255;    
        int r = fc + random.nextInt(bc - fc);    
        int g = fc + random.nextInt(bc - fc);    
        int b = fc + random.nextInt(bc - fc);    
        return new Color(r, g, b);    
    }
}
